/*
 * util.c
 *
 *  Created on: 19/feb/2013
 *      Author: donkey
 */

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "util.h"

unsigned long  diff(struct timeval second, struct timeval first) {

	struct timeval  lapsed;
	unsigned long t;

	if (first.tv_usec > second.tv_usec) {
		second.tv_usec += 1000000;
		second.tv_sec--;
	}

	lapsed.tv_usec = second.tv_usec - first.tv_usec;
	lapsed.tv_sec = second.tv_sec - first.tv_sec;

	t = lapsed.tv_sec*1000000 + lapsed.tv_usec;

//	printf("%lu.%lu - %lu.%lu =  %ld.%ld\n", second.tv_sec, second.tv_usec, first.tv_sec, first.tv_usec, lapsed.tv_sec, lapsed.tv_usec);

	return t;
}

double media(unsigned long* vettore, int dim){

	int i=0;
	double media = 0.0;
	unsigned long somma_valori = 0;

	for (i=0; i< dim; i++){
		somma_valori= somma_valori + vettore[i];
	}

	media = (double) somma_valori/dim;
	return media;
}

void salva_valori_in_CSV(int N,int iterazione_attuale, int iterazioni, double tempo_medio){

	FILE *fp;
	if ((fp=fopen("dati.csv","a")) != NULL){
		printf("Memorizzo valori in file...\n");
		fprintf(fp,"%d,%d,%d,%lf\n", iterazioni, iterazione_attuale, N, tempo_medio);
	}else printf("Errore durante la scrittura su file\n");

	fclose(fp);
}

unsigned long** alloca_matrice(int righe,int colonne){
	int r = 0;

	unsigned long** tempi=(unsigned long**) malloc (righe*sizeof( unsigned long*));
		for (r=0; r<colonne; r++)
			tempi[r] = (unsigned long *) malloc(colonne * sizeof(unsigned long));

	return tempi;
}

void dealloca_matrice(unsigned long** matrice_allocata, int righe){
	int i=0;
	for (i = 0; i < righe; i++)
		free(matrice_allocata[i]);

	free(matrice_allocata);
}
